package com.satan.juc.demo24;

import java.util.concurrent.atomic.AtomicMarkableReference;
//在Java并发编程中，AtomicMarkableReference是一个用于原子更新操作的工具类，它可以同时更新一个对象引用和一个布尔标记。
//这个类主要用于那些即使引用没有变化，也需要检测状态变化的场景，比如解决ABA问题。
public class AtomicMarkableReferenceExample {
    private static AtomicMarkableReference<String> atomicMarkableReference =
            new AtomicMarkableReference<>("initialValue", false);

    public static void main(String[] args) {
        String initialReference = atomicMarkableReference.getReference();
        boolean initialMark = atomicMarkableReference.isMarked();

        // 输出初始值和标记
        System.out.println("初始引用: " + initialReference + " 初始标记: " + initialMark);

        // 尝试使用compareAndSet方法更新引用和标记
        boolean wasUpdated = atomicMarkableReference.compareAndSet(
                initialReference, "newReference", initialMark, !initialMark);

        // 输出更新结果
        if (wasUpdated) {
            System.out.println("引用更新为: " + atomicMarkableReference.getReference());
            System.out.println("新标记为: " + atomicMarkableReference.isMarked());
        } else {
            System.out.println("更新失败");
        }
    }
}
